package firstcontent.gc;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: fxy
 * @Date: 2022/02/28/9:51
 * @Description: -XX:+PrintCommandLineFlags -XX:+UseG1GC
 *  -XX:+UseSerialGC
 *  -XX:+UseParNewGC
 *
 *  -XX:+UseParallelGC 和 -XX:+UseParallelOldGC是相互激活的
 *
 *  -XX:ParallelGCThreads 设置年轻代并行收集器的线程数。一般的，最好与CPU数量相等，以免过多的线程数影响垃圾收集性能
 *  在默认情况下，当CPU数量小于8个，ParallelGCThreads 的值等于CPU数量
 *  当CPU数量大于8个，ParallelGCThreads的值等于3+[5*CPU_count/8]
 *
 *  -XX:MaxGCPauseMillis 设置垃圾收集器最大停顿时间（即STW的时间）。单位是毫秒
 *  -XX:GCTimeRatio 垃圾收集时间占总时间的比例
 *  -XX:+UseAdaptiveSizePolicy  设置Parallel Scavenge收集器具有自适应调节策略
 *
 *  -XX:+UseConcMarkSweepGC  设置该参数会同时开启 +UseParNewGC
 *  CMS垃圾收集器默认启动的线程数是（ParallelGCThreads+3)/4,ParallelGCThreads是年轻代并行收集器的线程数
 *
 *  最小化地使用内存和并行开销 ：Serial GC
 *  最大化应用程序的吞吐量 ：Parallel GC
 *  最小化GC的中断或停顿时间 ：CMS GC
 *
 *  CMS在jdk9中被标记Deprecated,在jdk14中被删除
 *
 *  CMS优点：并发收集、低延迟
 *     弊端：1、内存碎片 2、对CPU资源非常敏感 3、无法处理浮动垃圾
 */
public class GCUseTest {
    public static void main(String[] args) {
        List<byte[]> list = new ArrayList<>();

        while(true){
            byte[] arr = new byte[100];
            list.add(arr);
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
